home *** CD-ROM | disk | FTP | other *** search
/ Almathera Ten Pack 3: CDPD 3 / Almathera Ten on Ten - Disc 3: CDPD3.iso / fish / 726-750 / 744 / fo2 / sources_fo2 / movehderb.c < prev    next >
C/C++ Source or Header  |  1995-03-18  |  2KB  |  104 lines

  1. #include "defs.h"
  2.  
  3. Prototype MoveHderB(WORD oB,WORD nB,WORD *datafree,WORD UDB[],WORD *i);
  4.  
  5.  
  6. /*    MoveHderB déplace le Header spécifié du bloc lB au bloc nB.
  7.     nB: nouveau n° de bloc.
  8.     oB: ancien  n° de bloc.
  9. */
  10.  
  11. MoveHderB(oB,nB,datafree,UDB,i)
  12. WORD oB,nB,*datafree;
  13. WORD UDB[],*i;
  14. {
  15. struct SFileHderB  *dlistB,*fhB;
  16. struct FileHeaderB *adr;
  17. struct DiskList       *hdb;
  18. struct FileHeaderB *adrh;
  19. struct  DataB       *AdrD;
  20. WORD   n,ret,ext,bloc,*nflB;
  21. WORD   gfree;
  22. BYTE   first;
  23. #ifdef DEBUG
  24.     printf("in MoveHderB() oB: %d, nB: %d,datafree: %d\n",oB,nB,*datafree);
  25. #endif
  26.     dlistB=whereB(oB);
  27.     if (dlistB==0) NotSet(oB,4);
  28.     else
  29.     {
  30.         if (dlistB->dl_Type!=-1) return(0);
  31.         adr=(struct FileHeaderB *)dlistB->dl_AdrB;
  32.             /* On change le HeaderKey du bloc */
  33.         adr->HeaderKey=nB;
  34.         dlistB->dl_Bloc2=nB;
  35.  
  36.             /* On change tous les DatasB en conséquence */
  37.         gfree=nB+1;
  38.         first=1;
  39.  
  40.         for (n=71;n!=-1;n--)
  41.         {    
  42.             if (adr->DataTable[n])
  43.             {
  44.                 if ( (dlistB->dl_Data==1) && (CLI==0) ) /* bloc de data ds gestion */
  45.                 {
  46.                     AdrD=ModifyDataHder((WORD)adr->DataTable[n],nB,gfree,adr->HeaderKey);
  47.                     adr->DataTable[n]=gfree;
  48.                     if (first) {adr->FirstDataB=gfree; first=0;}
  49.  
  50.                     gfree++;
  51.                     if (n) ModifyDataNext(AdrD,gfree);
  52.                     else ModifyDataNext(AdrD,gfree+1);
  53.                 }
  54.                 else
  55.                 {
  56.                     AdrD=ModifyDataHder(adr->DataTable[n],nB,*datafree,adr->HeaderKey);
  57.                     adr->DataTable[n]=*datafree;
  58.                     if (first) {adr->FirstDataB=*datafree; first=0;}
  59.  
  60.                     Inc(datafree);
  61.                     if (n) ModifyDataNext(AdrD,*datafree);
  62.                     else
  63.                     {
  64.                         if (FLnog) ModifyDataNext(AdrD,Nextdfree(datafree));
  65.                         else ModifyDataNext(AdrD,*datafree);
  66.                     }
  67.                 }
  68.  
  69.             }
  70.         }
  71.  
  72.         if (adr->Extension) 
  73.         {
  74.             if (FLnog) 
  75.             {
  76.                 nflB=datafree;
  77.                 ext=*datafree;
  78.             }    
  79.             else
  80.             {
  81.                 nflB=&gfree;
  82.                 ext=gfree;
  83.             }
  84.             if (CLI)    /* pas de .info dans les blocs de gestion */
  85.             {
  86.                 ModifyFList(adr->Extension,nB,nflB,datafree,0);
  87.             }
  88.             else
  89.             if (dlistB->dl_Data==1) /* si .info alors ds les blocs de gestion */
  90.             {
  91.                 ModifyFList(adr->Extension,nB,nflB,&gfree,1);
  92.             }
  93.             else
  94.             {
  95.                 ModifyFList(adr->Extension,nB,nflB,datafree,0);
  96.             }
  97.             adr->Extension=ext;
  98.         }
  99.  
  100.  
  101.     }
  102.     return(gfree);
  103. }
  104.